package com.lizhivscaomei.wms.domain.service;

import com.lizhivscaomei.wms.domain.entity.bills.inout.other.in.OtherInBill;
import com.lizhivscaomei.wms.domain.entity.bills.inout.produce.finished.in.ProductInBill;
import com.lizhivscaomei.wms.domain.entity.bills.inout.produce.raw.in.bill.RawDistReturnInBill;
import com.lizhivscaomei.wms.domain.entity.bills.inout.produce.raw.in.notice.RawDistReturnInNotice;
import com.lizhivscaomei.wms.domain.entity.bills.inout.produce.raw.out.bill.RawDistOutBill;
import com.lizhivscaomei.wms.domain.entity.bills.inout.produce.raw.out.notice.RawDistOutNotice;
import com.lizhivscaomei.wms.domain.entity.bills.inout.produce.wip.in.WipInBill;
import com.lizhivscaomei.wms.domain.entity.bills.inout.purchase.in.bill.PurchaseInBill;
import com.lizhivscaomei.wms.domain.entity.bills.inout.purchase.in.notice.PurchaseInNotice;
import com.lizhivscaomei.wms.domain.entity.bills.inout.purchase.out.bill.PurchaseReturnOutBill;
import com.lizhivscaomei.wms.domain.entity.bills.inout.purchase.out.notice.PurchaseReturnOutNotice;
import com.lizhivscaomei.wms.domain.entity.bills.inout.sale.in.bill.SaleReturnInBill;
import com.lizhivscaomei.wms.domain.entity.bills.inout.sale.in.notice.SaleReturnInNotice;
import com.lizhivscaomei.wms.domain.entity.bills.inout.sale.out.bill.SaleOutBill;
import com.lizhivscaomei.wms.domain.entity.bills.inout.sale.out.notice.SaleOutNotice;
import com.lizhivscaomei.wms.domain.entity.sku.Sku;

import java.util.List;

/**
 * 单据服务
 */
public interface StockService {

    /**
     * 根据通知单生成出入库单
     *
     * @param notice
     * @return
     */
    PurchaseInBill noticeToBill(PurchaseInNotice notice);

    /**
     * 根据通知单生成出入库单
     *
     * @param notice
     * @return
     */
    PurchaseReturnOutBill noticeToBill(PurchaseReturnOutNotice notice);

    /**
     * 根据通知单生成出入库单
     *
     * @param notice
     * @return
     */
    SaleReturnInBill noticeToBill(SaleReturnInNotice notice);

    /**
     * 根据通知单生成出入库单
     *
     * @param notice
     * @return
     */
    SaleOutBill noticeToBill(SaleOutNotice notice);

    /**
     * 根据通知单生成出入库单
     *
     * @param notice
     * @return
     */
    RawDistOutBill noticeToBill(RawDistOutNotice notice);

    /**
     * 根据通知单生成出入库单
     *
     * @param notice
     * @return
     */
    RawDistReturnInBill noticeToBill(RawDistReturnInNotice notice);

    /**
     * @param bill 入库单
     * @return
     */
    List<Sku> inBillToSkus(PurchaseInBill bill);

    /**
     * @param bill 入库单
     * @return
     */
    List<Sku> inBillToSkus(OtherInBill bill);

    /**
     * @param bill 入库单
     * @return
     */
    List<Sku> inBillToSkus(SaleReturnInBill bill);

    /**
     * @param bill 入库单
     * @return
     */
    List<Sku> inBillToSkus(ProductInBill bill);

    /**
     * @param bill 入库单
     * @return
     */
    List<Sku> inBillToSkus(RawDistReturnInBill bill);

    /**
     * @param bill 入库单
     * @return
     */
    List<Sku> inBillToSkus(WipInBill bill);

}
